package main

import "fmt"

// 函数
// 1. 无参数无返回值函数
func f1() {
	fmt.Println("f1 over")
}

// 2. 无参数有返回值函数
func f2() (ret int) {
	return 10 // 显式返回
}

// 3. 有参数有返回值函数定义
func f3(x int, y int) (ret int) {
	// return x + y
	ret = x + y
	return // 隐式返回
}

// 4. 多个返回值函数定义
func f4() (int, string) {
	return 10, "AAA"
}

// 5. 多个形参类型一致时，可以将前面的类型省略
func f5(x, y int) {}

// 6. 可变长参数(必须放在形参末尾，传入什么就是什么类型的切片)
func f6(x string, y ...int) {
	fmt.Printf("x: %v\n", x)
	fmt.Printf("y: %v type:%T\n", y, y)
}

func main() {
	sum := f3(1, 2)
	fmt.Printf("sum: %v \n", sum) // sum: 3

	_, s := f4()
	fmt.Printf("s: %v\n", s) // s: AAA

	f6("奇数", 1, 3, 5, 7)
}
